package pousada;
import java.io.Serializable;
import java.util.Vector;

import util.DataInvalidaException;
import util.Periodo;


/**
 * Esta classe representa a lista de todas as reservas de um quarto da pousada.
 * @author Vitor Maciel Fontes & Diego Cesar Florencio Queiroz
 *
 */
public class ListaReservasVetor implements Serializable, InterfaceReservas{
	
	private static final long serialVersionUID = 1L;
	public Vector<Reserva> reservas;
	public int numeroReservas;
	
	/**
	 * Cria a Lista de Reservas com capacidade inicial para 5 reservas. 
	 * (incrementado automaticamente ao inserir novas reservas)
	 *
	 */
	public ListaReservasVetor(){
		reservas = new Vector<Reserva>();
		numeroReservas = 0;
	}
	
	public void inserirReserva(Reserva novaReserva){
		reservas.add(novaReserva);
	}
	
	public void removerReserva(Reserva reservaRemovida){
		int i;
		i = 0;
		
		while( !reservaRemovida.equals(reservas.get(i)) ){
			i++;
		}
		reservas.remove(i);
	}
	
	public boolean periodoLivre(Periodo periodoDesejado){
		boolean resultado;
		resultado = true;
		
		numeroReservas = reservas.size();
		
		for (int i = 0; i < numeroReservas; i++){
			if (reservas.get(i).getPeriodo().temIntersecao(periodoDesejado)){
					resultado = false;
			}
		}

		return resultado;
	}

	public double getFaturamentoTotal() throws DataInvalidaException{
		double total;
		total = 0;
		
		numeroReservas = reservas.size();
		
		for(int i = 0; i < numeroReservas ; i++){
			total += reservas.get(i).getValorEstadia();
		}
		
		return total;
	}
	
	public String[] pegarPeriodosDasReservas(){
		String[] retorno;
		Periodo[] periodos;
		
		numeroReservas = reservas.size();
		
		retorno = new String[numeroReservas];
		periodos = new Periodo[numeroReservas];
		
		for (int i = 0; i < numeroReservas; i++){
			periodos[i] = reservas.get(i).getPeriodo();
		}
		
		int j;
		j = 0;
		
		while (j < numeroReservas - 1){
			if(periodos[j].posterior(periodos[j+1])){
				Periodo temp;
				temp = periodos[j];
				periodos[j] = periodos[j+1];
				periodos[j+1] = temp;
				j = 0;
			} else j++;
		}
		
		for (int i = 0; i < numeroReservas ; i++){
			retorno[i] = periodos[i].getDataInicial().toString() + " - " + periodos[i].getDataFinal().toString();
		}
		
		return retorno;
	}
	
	
	public Reserva[] getReservas(){
		Reserva[] retorno;
		numeroReservas = reservas.size();
		retorno = new Reserva[numeroReservas];
		
		for(int i = 0; i < numeroReservas ; i++){
			retorno[i] = reservas.get(i);
		}
		
		return retorno;
	}

	public int getNumeroReservas() {
		numeroReservas = reservas.size();
		return numeroReservas;
	}
}
